home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / program / 16 / aes.fth next >
Text File  |  1985-11-19  |  11KB  |  316 lines

  1. \ GEM AES Interfaces
  2. \
  3. \ Written by Timothy Huang and briefly hacked by Mitch Bradley.
  4. \
  5. \ This is pretty low-level stuff, and it hasn't been extensively used
  6. \ yet, so good luck.
  7. \
  8. \ For this to work, you have to rename FORTH.TOS to FORTH.PRG and restart
  9. \ Forth.
  10.  
  11. code aescall (s addr --- )      \ <addr> is the address of AES's
  12.                                 \ PARAMETER.BLOCK
  13.         sp )+ d1 lmove          \ pass <addr> to d1.long
  14.         th 1e #  sp -)  movem   \ save a3 thru a6
  15.         200 # d0 wmove          \ pass 200 to d0.word
  16.         2 trap                  \ do it
  17.         sp )+  th 78 #  movem   \ restore a6 thru a3
  18. c;
  19.  
  20. : l.array                       \ to create long size array
  21.         create /l* allot        \ n L.ARRAY <name>
  22.         does>                   \ (s index --- addr )
  23.                swap la+  ;
  24. : w.array                       \ to create word size array
  25.         create /w* allot        \ n W.ARRAY <name>
  26.         does>                   \ (s index --- addr )
  27.                swap wa+  ;
  28.  
  29. 6  l.array parameter.block      \ AES parameter block array
  30. 5  w.array aes-control          \ AES control array
  31. 15 w.array aes-global           \ AES global array, 30 bytes long
  32. 16 w.array aes-int_in           \ AES integer input array
  33. 7  w.array aes-int_out          \ AES integer output array
  34. 3  l.array aes-addr_in          \ AES address input array
  35. 1  l.array aes-addr_out         \ AES address output array
  36.  
  37. : aes-set (s from.addr --- )    \ set aes-control array
  38.         0 aes-control  10 cmove ;
  39.  
  40. : call-aes (s --- )             \ call the aes hook
  41.         0 parameter.block aescall ;
  42.  
  43. : init-a.p.b (s --- )           \ initialize aes parameter block
  44.         0 aes-control   0 parameter.block token!     \ move addresses of
  45.         0 aes-global    1 parameter.block token!     \ the arrays into
  46.         0 aes-int_in    2 parameter.block token!     \ the PARAMETER.BLOCK
  47.         0 aes-int_out   3 parameter.block token!
  48.         0 aes-addr_in   4 parameter.block token!
  49.         0 aes-addr_out  5 parameter.block token!   ;
  50.  
  51.  
  52. \ ***** The followings are only the very fundamental hooks between
  53. \       FORTH and the GEM AES.  Each function may need some real parameters
  54. \       to be placed in the right cells of the right array within the higher
  55. \       level definitions.
  56.  
  57. : aes-opc (s n1 n2 n3 n4 n5 --- )   \ to define all aes function names
  58.         create w, w, w, w, w,
  59.         does> aes-set  call-aes  ;
  60.  
  61.  
  62. \ ***** Application Library Routines
  63. \
  64. 0 0 1 0 10      aes-opc appl_init
  65. 0 1 1 2 11      aes-opc appl_read
  66. 0 1 1 2 12      aes-opc appl_write
  67. 0 1 1 0 13      aes-opc appl_find
  68. 0 1 1 2 14      aes-opc appl_tplay
  69. 0 1 1 1 15      aes-opc appl_trecord
  70. 0 0 1 0 19      aes-opc appl_exit
  71.  
  72. \ ***** Event Library Routines
  73. \
  74. 0 0 1 0 20      aes-opc evnt_keybd
  75. 0 0 5 3 21      aes-opc evnt_button
  76. 0 0 5 5 22      aes-opc evnt_mouse
  77. 0 1 1 0 23      aes-opc evnt_mesag
  78. 0 0 1 2 24      aes-opc evnt_timer
  79. 0 1 7 16 25     aes-opc evnt_multi
  80. 0 0 1 2 26      aes-opc evnt_dclick    
  81.  
  82. \ ***** Menu Library Routines
  83. \
  84. 0 1 1 1 30      aes-opc menu_bar
  85. 0 1 1 2 31      aes-opc menu_icheck
  86. 0 1 1 2 32      aes-opc menu_ienable
  87. 0 1 1 2 33      aes-opc menu_tnormal
  88. 0 2 1 1 34      aes-opc menu_text
  89. 0 1 1 1 35      aes-opc menu_register
  90.  
  91. \ ***** Object Library Routines
  92. \
  93. 0 1 1 2 40      aes-opc objc_add
  94. 0 1 1 1 41      aes-opc objc_delete
  95. 0 1 1 6 42      aes-opc objc_draw
  96. 0 1 1 4 43      aes-opc objc_find
  97. 0 1 3 1 44      aes-opc objc_offset
  98. 0 1 1 2 45      aes-opc objc_order
  99. 0 1 2 4 46      aes-opc objc_edit
  100. 0 1 1 8 47      aes-opc objc_change
  101.  
  102. \ ***** Form Library Routines
  103. 0 1 1 1 50      aes-opc form_do
  104. 0 0 1 9 51      aes-opc form_dial
  105. 0 1 1 1 52      aes-opc form_alert
  106. 0 0 1 1 53      aes-opc form_error
  107. 0 1 5 0 54      aes-opc form_center
  108.  
  109. \ ***** Graphics Library Routines
  110. \
  111. 0 0 3 4 70      aes-opc graf_rubberbox
  112. 0 0 3 8 71      aes-opc graf_dragbox
  113. 0 0 1 6 72      aes-opc graf_movebox
  114. 0 0 1 8 73      aes-opc graf_growbox
  115. 0 0 1 8 74      aes-opc graf_shrinkbox
  116. 0 0 1 4 75      aes-opc graf_watchbox
  117. 0 1 1 3 76      aes-opc graf_slidebox
  118. 0 0 5 0 77      aes-opc graf_handle
  119. 0 1 1 1 78      aes-opc graf_mouse
  120. 0 0 5 0 79      aes-opc graf_mkstate
  121.  
  122. \ ***** Scrap Library Routines
  123. \
  124. 0 1 1 0 80      aes-opc scrp_read
  125. 0 1 1 0 81      aes-opc scrp_write
  126.  
  127. \ ***** File Selector Library Routines
  128. \
  129. 0 2 2 0 90      aes-opc fsel_input
  130.  
  131. \ ***** Window Library Routines
  132. \
  133. 0 0 1 5 100     aes-opc wind_create
  134. 0 0 1 5 101     aes-opc wind_open
  135. 0 0 1 1 102     aes-opc wind_close
  136. 0 0 1 1 103     aes-opc wind_delete
  137. 0 0 5 2 104     aes-opc wind_get
  138. 0 0 1 6 105     aes-opc wind_set
  139. 0 0 1 2 106     aes-opc wind_find
  140. 0 0 1 1 107     aes-opc wind_update
  141. 0 0 5 6 108     aes-opc wind_calc
  142.  
  143. \ ***** Resource Library Routines
  144. \
  145. 0 1 1 0 110     aes-opc rsrc_load
  146. 0 0 1 0 111     aes-opc rsrc_free
  147. 1 0 1 2 112     aes-opc rsrc_gaddr
  148. 0 1 1 2 113     aes-opc rsrc_saddr
  149. 0 1 1 1 114     aes-opc rsrc_obfix
  150.  
  151. \ ***** Shell Library Routines
  152. \
  153. 0 2 1 0 120     aes-opc shel_read
  154. 0 2 1 3 121     aes-opc shel_write
  155. 0 1 1 0 124     aes-opc shel_find
  156. 0 3 1 0 125     aes-opc shel_envrn
  157.  
  158. \ ***** Application initialize
  159. \
  160.  
  161. : app-init ( --- )
  162.         init-a.p.b
  163.         appl_init  ;
  164.  
  165. \ ***** Some higher level window words
  166. \
  167. \ These are some easy samples of using the GEM AES.
  168. \ Using others may not be so simple. For example, in order to 
  169. \ use the Resource Library, you must first shrink the ( FORTH )
  170. \ system memory to free up some spaces for the loading of resource 
  171. \ file, which will be loaded ABOVE (on top of) the end of FORTH.
  172. \ The shrinking may be done with ?shrink-memory.
  173. \ This doesn't work if EMACS is resident, because EMACS takes up the
  174. \ rest of the available memory that Forth doesn't use.  (You can get
  175. \ rid of EMACS with unload-emacs if you've been editing.)
  176.  
  177. : int_in_w!  aes-int_in w! ;
  178. : int_in_l!  aes-int_in l! ;
  179.  
  180. variable window.handle
  181. : select-window  ( window-handle -- ) window.handle ! ;
  182. : set-handle ( -- )  window.handle @  0 int_in_w! ;
  183.  
  184. : window-create (s x y w h type --- window.handle )
  185.         0 int_in_w!
  186.         4 int_in_w!
  187.         3 int_in_w!
  188.         2 int_in_w!
  189.         1 int_in_w!
  190.         wind_create
  191.         0 aes-int_out w@ select-window ;
  192.  
  193. : window-reset (s -- )   \ sets x y w h back for open    
  194.         set-handle
  195.         7 1 int_in_w!
  196.         wind_get
  197.         1 aes-int_out  1 aes-int_in  8 cmove  ;
  198.  
  199. : window-open (s -- )    \ open a window
  200.         window-reset
  201.         wind_open  ;
  202.  
  203. : window-close (s -- )   \ close a window
  204.         set-handle
  205.         wind_close  ;
  206.  
  207. : window-delete (s -- )  \ delete a window
  208.         set-handle
  209.         wind_delete  ;
  210.  
  211. : >>cstr  ( addr len -- cstr ) fstrbuf pack cstr ;
  212. : window-name (s addr len -- )        \ name a  window
  213.    >>cstr  set-handle   2 1 int_in_w!  2 int_in_l!   wind_set
  214. ;
  215.  
  216. : window-info (s string -- )        \ name a  window
  217.    >>cstr  set-handle   3 1 int_in_w!  2 int_in_l!   wind_set
  218. ;
  219.  
  220. : window-work (s -- )     \ aes-int_out contains xywh of work
  221.    set-handle   4 1 int_in_w!  wind_get
  222. ;
  223.  
  224. \ ########### Usage Examples ############
  225.  
  226. \ To create a window :  <x> <y> <w> <h> <parts> window-create
  227. \    This will create a window using the provided parameters.  However,
  228. \    it does not show the window.  Return with that window selected.
  229. \    See AES manual for the <parts> definition. If <parts> = 4095 (dec),
  230. \    then, you will get a window with all possible components.
  231. \
  232. \    When a window is created, it is assigned a "window-handle", which
  233. \    is a small number used to identify that window.  The handle is
  234. \    stored into a variable "window.handle".  The other window functions
  235. \    use this variable to determine which window to use.  You can change
  236. \    this variable with  <handle> select-window
  237. \
  238. \ To show a window :        erase-screen  ( clear the CRT first )
  239. \                window-open
  240. \    This will clear the CRT and then display the window.
  241. \    Don't use window-open on a window that is already open, or the
  242. \    system will crash.
  243. \
  244. \ To close (or delete) a window    :
  245. \        window-close (or window-delete)
  246. \    This will close (delete) the opened window from CRT.
  247. \    Don't use window-close on a window that is already closed, or the
  248. \    system will crash.
  249. \
  250. \ To switch between windows :
  251. \    <window-handle> select-window     window-open  
  252. \
  253. \ To put a name into a window's title bar :
  254. \    " My Window"  window-name
  255. \
  256. \ To put a string into a window's information bar :
  257. \    " A bunch of stuff"  window-info
  258.  
  259. \ Mouse shapes definitions
  260.  
  261. 0   constant arrow
  262. 1   constant i-bar
  263. 2   constant bee
  264. 3   constant pointing
  265. 4   constant hand
  266. 5   constant thin+
  267. 6   constant thick+
  268. 7   constant outline+
  269. 255 constant user.mouse        \ You must define the user mouse first !!!!!!!
  270.  
  271. : mouse (s shape --- )      \ set mouse according to <shape>
  272.     0 int_in_w!
  273.         graf_mouse  ;                        
  274.  
  275. \ Mouse Examples :
  276. \ arrow mouse
  277. \ i-bar mouse
  278. \ bee mouse
  279. \ hand mouse
  280. \ pointing mouse
  281. \ thin+ mouse
  282. \ thick+ mouse
  283. \ outline+ mouse
  284. \ *** Note: Do not use " user.mouse ", unless you have first defined
  285. \ ***       your own mouse shape.
  286. \ ***        See AES manual regarding to this subject for details.
  287.  
  288. \ File Selection Input
  289.  
  290. \ Tim says:
  291. \ This definition will work. But watch for the following things:
  292. \   (1) <path> and <file> must be selected carefully.  At this moment,
  293. \     I am not very clear on what the AES manual means. I stuffed the
  294. \     <path> with <pad> and <file> with <pad> [ after making a " get
  295. \     current path name " ( GEMDOS function 47 : <drive#> <pad> d_getpath )].
  296. \   (2) You must have mouse action enabled ( how to do this ???? ),
  297. \    so that you can interact with the input selection.
  298. \    Otherwise, it will be waiting for some mouse actions
  299. \    which it will NEVER get.  This means after the nice box is drawn, it
  300. \    will hang the system.
  301. \   (3) Some times, the above method will not show the nice box, but 
  302. \     returns 1 & 0, which indicate successful operation and cancel 
  303. \    button was selected.  I think this must be the wrong input
  304. \    parameters and the mouse action enable problems.
  305.                          
  306. : get.file ( path file --- return button )
  307.     1 aes-addr_in !
  308.     0 aes-addr_in !
  309.     fsel_input
  310.     0 aes-int_out w@  1 aes-int_out w@ ;
  311.  
  312. user-state
  313. init-a.p.b
  314. app-init